Streaming data to multiple endpoints at the same time under real-time constraints requires specialized protocols. One attempt to stream data (e.g., voice or video data) to endpoints in a network involves connecting all endpoints to a single cluster of machines which share the content being distributed (referred to as the single-source point-to-point solution); alternatively advanced network elements may be used for multicasting, where packets are duplicated in the network elements as needed to reach each endpoint (referred to as the single-source multicast solution).
Network coding is a technique of in-network re-coding of source packets for distribution among network elements: peer network elements produce linear combinations (P) of a prescribed number (n) of data blocks (B) based on applying sets of randomized coefficients (x), where each block of data (Bj) is encoded into each encoded data structure (P(i)) according to the equation:
                                          P            ⁡                          (              i              )                                =                                    ∑                              j                =                1                            n                        ⁢                                          x                ij                            *                              B                j                                                    ,                            (        1        )            where “i” identifies a packet sequence (i=1 to m, where “m” is the number of encoded packets such that m≧n), “xij” is a random coefficient multiplied with the corresponding data block “Bj” (the symbol “*” denotes multiplication), and “n” is the number of data blocks (B) that are being encoded to generate the linear combination P(i). Hence, the m-dimensional vector of encoded data structures P is generated from applying the m-by-n matrix of random coefficients X to the n-dimensional vector of data blocks B, resulting in the linear vector equation:P=X*B  (2).Consequently, a network element can output a number (m≧n) of data packets, where each data packet includes a data structure “P(i)” and the corresponding set of randomized coefficients (e.g., xi1, xi2, xi3, . . . , xin) used to generate the corresponding data structure “P(i)”. Once a receiver has received at least “n” number of data packets having unique data structures “P(i)”, the receiver can apply linear algebra to rebuild the matrix of random coefficients (X), determine the inverse matrix (X−1) of the matrix of random coefficients (X) (e.g., using Gaussian elimination) to obtain the Identity Matrix I (i.e., coefficients equal to 1 only along the diagonal and zero elsewhere) based on applying “m” equations to “n” unknowns, and recover the vector of data blocks B based on determining the inverse matrix (X−1), where:X*X−1=I(I=The Identity Matrix), andB=P*X−1  (3).